package com.shazhu.common.utils.nongjt;


import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.shazhu.common.enums.SmsEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
    /**
     * @author hzliu
     * @version 1.0
     * @since 2025/7/29 10:32
     */
    @Component
    public class SmsUtils {
      public static final Logger log = LoggerFactory.getLogger(SmsUtils.class);
//        /**
//         * 阿⾥云 accessKeyId（安全信息管理下⾯） TODO 替换成⾃⼰的
//         */
//        @Value("${nongjt.aliyun.sms.accessKeyId}")
//        private String accessKeyId;
//        /**
//         * 阿⾥云 accessKeySecret（安全信息管理下⾯）TODO 替换成⾃⼰的
//         */
//        @Value("${nongjt.aliyun.sms.accessKeySecret}")
//        private String accessKeySecret;
//        /**
//         * 使⽤AK&SK初始化账号Client
//         *
//         * @return Client
//         * @throws Exception
//         */
        public Client createClient() throws Exception {
            Config config = new Config()
                    .setAccessKeyId("")
                    .setAccessKeySecret("");
            // 访问的域名
            config.endpoint = "dysmsapi.aliyuncs.com";
            return new Client(config);
        }
        /**
         * 发送短信
         *
         * @param mobile ⼿机号
         * @param param 模板参数，JSON格式
         * @param smsEnum 消息模板
         * @return true 消息发送成功，false 消息发送失败
         */
        public Boolean sendSms(String mobile, JSONObject param, SmsEnum smsEnum) {
            try {
                // 初始化请求客户端
                Client client = createClient();
                // 组装请求对象
                SendSmsRequest sendSmsRequest = new SendSmsRequest()
                        // 必填:待发送⼿机号
                        .setPhoneNumbers(mobile)
                        // 必填:短信签名-可在短信控制台中找到
                        .setSignName(smsEnum.getSignName())
                        // 必填:短信模板-可在短信控制台中找到
                        .setTemplateCode(smsEnum.getTemplateCode())
                // 可选:模板中的变量替换JSON串,如模板内容为 "您的验证码为${code},该验证码5分钟内有效，请勿泄露他⼈！"
                    .setTemplateParam(JSON.toJSONString(param));
            // 获取响应对象
            SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
            log.info("短信接⼝返回数据 {}", JSONObject.toJSONString(sendSmsResponse));
            if ("OK".equals(sendSmsResponse.getBody().getCode())) {
                return Boolean.TRUE;
            }
        } catch (Exception e) {
            log.error("短信验证码发送异常：{}", e.getMessage(), e);
        }
 return Boolean.FALSE;
    }
        /**
         * 测试⽅法
         *
         * @param args
         */
        public static void main(String[] args) {
            // 注意：main ⽅法中⽆法使⽤ Spring 注⼊，如需测试请使⽤ Spring 环境调⽤
            String mobile = "";
            JSONObject param = new JSONObject();
            // 这⾥需要根据短信模板配置的参数调整
            param.put("code", ValidateCodeUtils.generateValidateCode(6));
            // sendSms(mobile, param, SmsEnum.REGISTER_TEMPLATE_CODE); // 通过 Spring 容器调⽤
        }
    }

